﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Security;
using SIMCObjetoNegocio;
using SIMCFachadaNegocio;

public partial class SiteMaster : System.Web.UI.MasterPage
{
    MembershipUsuario usuario;
    private FachadaPersona fachada;

    protected override void OnInit(EventArgs e)
    {
        usuario = ((MembershipUsuario)Session["Usuario"]);
        fachada = new FachadaPersona();
        base.OnInit(e);
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (usuario != null)
        {
            if (!IsPostBack)
            {
                NavigationMenu.Visible = true;
                btnSalir.Visible = true;
                PersonaPlana persona = fachada.BuscarPersonaPlana(usuario.UserId);
                if (persona != null)
                {
                    ((SessionVariable)Session["Variable"]).TipoPersona = persona.TipoNJ;
                    btnUsuarioLogeado.Text = persona.NombreCorto;
                    CrearTreeView(persona);
                }
                else
                {
                    SimcMembershipProvider provider = (SimcMembershipProvider)Membership.Provider;
                    if (provider.Usuario != null)
                    {
                        btnUsuarioLogeado.Text = provider.Usuario.UserName;

                    }
                }

            }
        }
    }

    private void CrearTreeView(PersonaPlana persona)
    {
        TreeNode root = new TreeNode();
        root.Text = persona.Id.ToString() + "-" + persona.NombreCorto;
        if (persona.TipoNJ == "N")
        {
            root.ChildNodes.Add(new TreeNode { Text = "Persona Natural", Value = "N", NavigateUrl = "~/UsuarioInterno/wfConsultaPersona.aspx" });
        }
        else
        {
            root.ChildNodes.Add(new TreeNode { Text = "Persona Jurídica", Value = "J", NavigateUrl = "~/UsuarioInterno/wfConsultaPersona.aspx" });
        }

        TreeNode direccionesNode = new TreeNode { Text = "Direcciones" };
        TreeNode cuentasNode = new TreeNode { Text = "Cuentas" };
        TreeNode relacionesNode = new TreeNode { Text = "Relaciones" };
        TreeNode documentosNode = new TreeNode { Text = "Documentos" };
        TreeNode atributosNode = new TreeNode { Text = "Atributos" };

        CrearNodosDireccion(direccionesNode);

        CrearNodoCuentas(cuentasNode);

        CrearNodoRelacion(relacionesNode);

        CrearNodoDocumento(documentosNode);

        CrearNodoAtributos(atributosNode);

        root.ChildNodes.Add(direccionesNode);
        root.ChildNodes.Add(cuentasNode);
        root.ChildNodes.Add(atributosNode);
        root.ChildNodes.Add(relacionesNode);
        root.ChildNodes.Add(documentosNode);
        ExpandirNodoSeleccionado(root);

        TreeView1.Nodes.Add(root);


    }

    private void ExpandirNodoSeleccionado(TreeNode root)
    {
        string pagina = Page.Request.AppRelativeCurrentExecutionFilePath.Split('/')[1].Split('.')[0];
        foreach (TreeNode nodo in root.ChildNodes)
        {
            if (nodo.Value == pagina)
            {
                nodo.ExpandAll();
            }
        }
    }
    private void CrearNodoAtributos(TreeNode atributosNode)
    {
        IList<ClasificacionPersonas> atributos = fachada.BuscarListaAtributo(usuario.UserId);
        Dictionary<string, string> listaAtributos = new Dictionary<string, string>();
        foreach (ClasificacionPersonas clasif in atributos)
        {
            if (!listaAtributos.ContainsKey(clasif.Atributo))
            {
                listaAtributos.Add(clasif.Atributo, clasif.DescripcionAtributo);
            }
        }

        foreach (KeyValuePair<string, string> atr in listaAtributos)
        {
            atributosNode.ChildNodes.Add(new TreeNode { Text = atr.Value, Value = "atributos." + atr.Key });
        }
    }
    private void CrearNodoDocumento(TreeNode documentosNode)
    {
        IList<DocumentoPersona> listaDocumentos = fachada.BuscarListaDocumento(usuario.UserId);
        foreach (DocumentoPersona documento in listaDocumentos)
        {
            documentosNode.ChildNodes.Add(new TreeNode { Text = documento.TipoDocumentoDescripcion, Value = "documento" });
        }
    }
    private void CrearNodoRelacion(TreeNode relacionesNode)
    {
        IList<Relacion> listaRelaciones = fachada.BuscarListaRelacion(usuario.UserId);
        if (listaRelaciones != null)
        {
            List<string> listaTipos = new List<string>();

            foreach (Relacion relacion in listaRelaciones)
            {
                if (!listaTipos.Contains(relacion.TipoRelacion))
                {
                    listaTipos.Add(relacion.TipoRelacionDescripcion);
                }
            }
            foreach (string tipo in listaTipos)
            {
                TreeNode tipoNode = new TreeNode { Text = tipo };
                foreach (Relacion rel in listaRelaciones)
                {
                    if (rel.TipoRelacionDescripcion == tipo)
                    {
                        tipoNode.ChildNodes.Add(new TreeNode { Text = rel.NombrePersona_2, Value = "relaciones." + rel.IdPersona2 });
                    }
                }
                relacionesNode.ChildNodes.Add(tipoNode);
            }


        }
    }
    private void CrearNodoCuentas(TreeNode cuentasNode)
    {
        IList<CuentaBancaria> myCuentas = fachada.BuscarListaCuentaBancaria(usuario.UserId);

        List<string> listaDivisas = new List<string>();
        foreach (CuentaBancaria cuenta in myCuentas)
        {
            if (!listaDivisas.Contains(cuenta.Divisa))
            {
                listaDivisas.Add(cuenta.Divisa);
            }
        }

        //List<TreeNode> divisasNodes = new List<TreeNode>();
        foreach (string divisa in listaDivisas)
        {
            TreeNode nodo = new TreeNode();
            nodo.Text = divisa;
            foreach (CuentaBancaria myCuenta in myCuentas)
            {
                if (myCuenta.Divisa == divisa)
                {
                    nodo.ChildNodes.Add(new TreeNode { Text = myCuenta.Persona_Nombre1, ToolTip = myCuenta.Persona_Nombre1 + " - " + myCuenta.NumeroEnBanco, Value = "cuentas." + myCuenta.Id });
                }
            }
            cuentasNode.ChildNodes.Add(nodo);
        }
    }
    private void CrearNodosDireccion(TreeNode direccionesNode)
    {
        IList<DireccionFisica> myDirecciones = fachada.BuscarListaDireccion(usuario.UserId);

        foreach (DireccionFisica dir in myDirecciones)
        {
            direccionesNode.ChildNodes.Add(new TreeNode { Text = dir.TipoDireccionDescripcion, Value = "direcciones." + dir.TipoDireccion });
        }
    }

    protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
    {
        TreeNode nodo = TreeView1.SelectedNode;

        if (nodo.Value.Contains("."))
        {
            string pagina = nodo.Value.Split('.')[0];
            string valor = nodo.Value.Split('.')[1];
            ((SessionVariable)Session["Variable"]).valorTreeView = valor;
            switch (pagina)
            {
                case "direcciones":
                    {
                        Response.Redirect("~/UsuarioInterno/Direcciones.aspx");
                    } break;
                case "cuentas":
                    {
                        Response.Redirect("~/UsuarioInterno/Cuentas.aspx");
                    } break;
                case "atributos":
                    {
                        Response.Redirect("~/UsuarioInterno/Atributos.aspx");
                    } break;
                case "relaciones":
                    {
                        Response.Redirect("~/UsuarioInterno/wfConsultarRelaciones.aspx");
                    } break;
            }
        }

    }
    protected void lbtnSalir_Click(object sender, EventArgs e)
    {
        Session["Variable"] = null;
        Response.Redirect("~/Account/Login.aspx");

    }
    protected void btnUsuarioLogeado_Click(object sender, EventArgs e)
    {
        Response.Redirect("ConsultaUsuario.aspx");
    }
}
